package com.yh.utils;

import cn.hutool.core.bean.OptionalBean;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjectUtil;
import com.yh.vo.UserVO;

/**
 * 验证实体类的携带的数据是否符合某种规则 如：邮箱数据是否满足邮箱的格式
 *
 * @author yuhuan
 * @date 2022/01/13
 */
public class DataFormatValidator {

    /**
     * 验证用户的邮箱地址和手机号码是否符合数据格式，并且额外验证用户的昵称是不是为空。空的邮箱和手机
     * 会被忽略，从而使数据验证被直接通过
     */
    public static int userValidator(UserVO user) {
        // 检查邮箱格式
        String email = OptionalBean.ofNullable(user).getBean(UserVO::getUserEmail).get();
        int isEmail = validatorEmail(email);
        if (isEmail != Constants.ValidatorResult.DATA_PASS) {
            return isEmail;
        }
        ;
        // 检查手机格式
        String mobile = OptionalBean.ofNullable(user).getBean(UserVO::getUserPhone).get();
        int isMobile = validatorMobile(mobile);
        if (isMobile != Constants.ValidatorResult.DATA_PASS) {
            return isMobile;
        }
        // 检查用户昵称是否为空（忽略空用户）
        String name = OptionalBean.ofNullable(user).getBean(UserVO::getUserName).get();
        if (ObjectUtil.isEmpty(name) && ObjectUtil.isNotEmpty(user)) {
            return Constants.ValidatorResult.NULL_VALUE;
        }
        return Constants.ValidatorResult.DATA_PASS;
    }

    /**
     * 验证邮箱地址是否符合格式（忽略空值）；返回标记结果
     */
    public static int validatorEmail(String email) {
        boolean isEmail = Validator.isEmail(email);
        if (!isEmail && ObjectUtil.isNotEmpty(email)) {
            return Constants.ValidatorResult.EMAIL_ERROR;
        }
        return Constants.ValidatorResult.DATA_PASS;
    }

    /**
     * 验证手机号码是否符合格式（忽略空值）；返回标记结果
     */
    public static int validatorMobile(String mobile) {
        boolean isMobile = Validator.isMobile(mobile);
        if (!isMobile && ObjectUtil.isNotEmpty(mobile)) {
            return Constants.ValidatorResult.MOBILE_ERROR;
        }
        return Constants.ValidatorResult.DATA_PASS;
    }
}
